import 'dart:async';
import 'dart:math';

// 判断单字符是否为空
bool judgeStrIsEmpty(String str) => str?.isEmpty ?? true;

// 判断多字符是否均不为空
bool judgeMultStrIsNotEmpty(List<String> strs) =>
    strs.every((str) => !judgeStrIsEmpty(str));

// 判断在Map中是否存在给入key
bool judgetMapExistKey<T>(Map<String, T> map, String key) {
  return map.containsKey(key);
}

// 打印当前堆栈信息
void logCurrStackTrace() {
  print(StackTrace.current);
}

// 播放次数信息格式化
String formatPlayCount(num count) {
  // 换为万制
  if (count >= 10000) {
    count /= 10000;
    return '${count.toStringAsFixed(1)}万';
  }
  return '$count';
}

// 视频长度格式化
String formatVideoTime(num time) {
  int min = time ~/ 60;
  int hour = time ~/ 3600;
  return "${hour > 0 ? hour.toString() + ':' : ''}$min:${time % 60}";
}

// 收藏次数信息格式化
final formatRecordCount = formatPlayCount;

// 粉丝信息计数格式化
String formatFansCount(num count) {
  // 特别离谱的数据
  if (count >= 10000000) {
    count /= 10000000;
    return '${count.toStringAsFixed(1)}万';
  }
  // 换为万制
  if (count >= 10000) {
    count /= 10000;
    return '${count.toStringAsFixed(1)}万';
  }
  return '$count';
}

// 视频个数格式化
String formatVideoCount(num count) {
  return formatFansCount(count ~/ 3);
}

// 工具栏按钮字符计数格式化
final formatVideoToolbarCount = formatFansCount;

// 过滤安全文本
String filterSafeText(String text) {
  const sensitiveWords = ["调教"];
  for (int i = 0; i < sensitiveWords.length; i++) {
    text = text.replaceAll(sensitiveWords[i], "");
  }
  return text;
}

// 空函数别名
typedef void VoidCb();

// 防抖方法
Function debounce(Duration time, VoidCb callback) {
  Timer timer; // 计时器
  return () {
    timer?.cancel(); // 如果再调用就取消定时器
    timer = Timer(time, callback);
  };
}

// 生成随机整数
int getScopeRandomInt(int min, int max) =>
    min + Random().nextInt(max - min + 1);

// 浮点数向下确定精度
double doubleDownToPrecision(double number, int precision) {
  final res1 = double.parse(number.toStringAsFixed(precision));
  final res2 = double.parse((number - 5 * (pow(0.01,precision))).toStringAsFixed(precision));
  return res1 > number ? res2 : res1;// 如果发生了进位则向下取整
}